3 SYS9*4096 5 .OPT OO 10 IN = $EE83;ZEICHEN VOM SERIELLEN PORT LESEN 20 OUT = $F35F;ZEICHEN IN AUSGABEPUFFER 30 END = $EE66;SA BEARBEITUNG BEENDEN 40 PORT = $0240;MEMORY MANAGER 45 ;******** ORIGINAL BETRIEBSSYSTEM ******* 50 *= $4400 ; ZEICHENSATZ AENDERN 51 .BYTE $3C,$40,$8C,$92,$9E,$42,$3C,$00;KLAMMERAFFE 52 *= $4858 53 .BYTE $FE,$08,$14,$22,$00,$00,$00,$00;KLEINES K 60 *= $4A79;ROM CHECK UMGEHEN 61 BNE Z1 62 Z1 INC $00 70 *= $4AB1;MEMORY MANAGEMENT 71 LDA #$01;BIT 0 SETZEN OHNE SPEICHERVERTEILUNG 72 JSR Z9;ZU AENDERN 73 JSR $EC61;INITIALISIEREN DER PORTS 80 *= $5B02;MEMORY MANAGEMENT 81 LDA PORT;LOW IMPULS VON 12 TAKTZYKLEN 82 AND #$FE; AUF BIT 0 LEGEN OHNE SPEICHER 83 STA PORT; VERTEILUNG ZU AENDERN 84 ORA #$01 85 JSR Z2 90 *= $5D01;*** MEMORY MANAGEMENT *** 91 Z9 ORA PORT 92 Z2 STA PORT 93 RTS 100 ;******** SPEZIAL BETRIEBSSYSTEM ******* 101 *= $6400 ; ZEICHENSATZ AENDERN 110 .BYTE $3C,$40,$8C,$92,$9E,$42,$3C,$00;KLAMMERAFFE 120 *= $6858 130 .BYTE $FE,$08,$14,$22,$00,$00,$00,$00;KLEINES K 150 *= $6A79;ROM CHECK UMGEHEN 160 BNE I1 170 I1 INC $00 200 *= $6AB1;MEMORY MANAGEMENT 210 LDA #$01;BIT 0 SETZEN OHNE SPEICHERVERTEILUNG 220 JSR J9;ZU AENDERN 230 JSR $EC61;INITIALISIEREN DER PORTS 300 *= $6BBE;REV 7X 310 .BYTE $37,$58 400 *= $6D2C;ANZAHL DER ZULAESSIGEN SA 410 .BYTE $10 500 *= $6D3D;SA TABELLE 510 .WORD J2-1,$EDB8,$EDBB,$EDF2,$EE00 520 .WORD $EE09,$EE22,$EE29,J3-1,$EE41 530 .WORD $EE4A,J4-1,J5-1,$EE35,J6-1,J7-1 600 *= $6D69;ABFRAGE AUF NEUE STEUERZEICHEN 610 JSR J1 700 *= $6E36;SA 13 SPEICHERVERTEILUNG FESTLEGEN 710 LDA $64;CODE HOLEN 720 ORA #01;BIT 0 MUSS GESETZT BLEIBEN 730 NOP 740 NOP 750 STA PORT;SELEKTION GUELTIG 760 JMP END;MUSS UNBEDINGT HIER STEHEN 800 *= $7660;PAPERFEED ROUTINE 810 JMP J8;ZUR ERWEITERUNG 820 NOP 900 *= $7B02;MEMORY MANAGEMENT 910 LDA PORT;LOW IMPULS VON 12 TAKTZYKLEN 920 AND #$FE; AUF BIT 0 LEGEN OHNE SPEICHER 930 STA PORT; VERTEILUNG ZU AENDERN 940 ORA #$01 950 JSR A1 1000 *= $7D01;*** MEMORY MANAGEMENT *** 1010 J9 ORA PORT 1020 A1 STA PORT 1030 RTS 1100 ;*** PAPERFEED *** 1110 J8 LDA $60;PAGING OFF 1120 BMI B1;JA, DANN NEUE ROUTINE 1130 JMP $F664;SONST WIE GEHABT 1140 B1 LDA #$FF;VORSCHUB VON 255 ZEILEN ANSTOSSEN 1150 JSR $F646 1160 LDA #$08 1170 B2 BIT $0280;PAPERFEEDTASTE GEDRUECKT 1180 BEQ B2;JA, DANN WEITER WARTEN 1190 LDA #$00;SONST MOTOR ABWUERGEN 1200 STA $92 1210 RTS 1300 ;*** ANFANG VON SA0 *** 1310 J2 LDA $64;WIE BISHER, MUSSTE NUR PLATZ 1320 BIT $0202;FUER SA-TABELLENERWEITERUNG MACHEN 1330 BPL C1 1340 LDY #$00 1350 STY $87 1360 C1 JMP $ED5E 1400 ;*** SA8 WEIL DORT JETZT SA13 *** 1410 J3 BIT $0202 1420 BMI D1 1430 LDA #$00 1440 STA $87 1450 D1 JMP END 1500 ;*** SA11 ROM INS RAM *** 1510 J4 LDY #$00;KOPIEREN VON E400 BIS FFFF 1520 STY $80; LOWBYTE 1530 LDA #$E4 1540 STA $81; HIGHBYTE 1550 E1 LDA ($80),Y;ROM LESEN 1560 STA ($80),Y;IN RAM SCHREIBEN, UMSCHALTUNG DURCH 1570 INY; MEMORY MANAGER 1580 BNE E1 1590 INC $81 1600 BNE E1 1610 BEQ D1 1700 ;*** SA12 IN RAM SCHREIBEN *** 1710 J5 LDA $64;LOWBYTE DER ANFANGSADRESSE HOLEN 1720 STA $7E 1730 JSR IN;HIGHBYTE HOLEN 1740 BVS F1;SCHON ANDERE SA JA, DANN FEHLER 1750 LDA $64 1760 STA $7F 1770 F3 JSR IN;ZEICHEN LESEN 1780 BVS F2;ENDE, WENN NEUE SA KOMMT 1790 LDA $64 1800 LDX #$00 1810 STA ($7E,X);ZEICHEN IN RAM 1820 INC $7E 1830 BNE F3;NAECHSTES ZEICHEN 1840 INC $7F 1850 BNE F3;NAECHSTES ZEICHEN 1860 JMP $ED23;RAMTOP ERREICHT, ENDE 1870 F1 JMP $EE80;TERMINATOR ERROR 1880 F2 JMP $ED26;REGULAERES ENDE 3000 ;*** SA14 8BIT GRAPHIK *** 3010 J6 LDA PORT 3020 AND #$EF 3030 STA PORT;RAM IM ZEICHENSATZBEREICH EINSCHALTEN 3040 LDA #$12 3050 STA $E9FE;GRAPHIKENDEANFORDERUNG RUECKSETZEN 3070 K1 LDA $64;ZEICHEN LADEN 3080 JSR H3;UND DER GRAPHIKROUTINE UEBERREICHEN 3130 K2 JSR IN;NAECHSTES ZEICHEN ABHOLEN 3140 BVC K1;NEUE SA NEIN, DANN WEITER GRAPHIK 3160 LDY #$8D;SONST LETZTE ZEILE DRUCKEN 3170 JSR H6 3180 K3 LDA $7A;SCHON AUF PAPIER 3190 BNE K3;NEIN, DANN WARTEN 3200 LDA PORT;SONST ROM ZEICHENSATZ EINSCHALTEN 3210 ORA #$10 3220 STA PORT 3280 JMP $ED26;ENDE 4000 ;*** 7BIT-GRAPHIK CHR$(8) *** 4010 J1 CMP #$08;CHR$(8) = GRAPHIK EIN EMPFANGEN 4020 BNE H1;NEIN DANN WEITER UNTERSUCHEN 4030 LDA PORT;SONST RAM IM ZEICHENSATZBEREICH EIN 4040 AND #$EF 4050 STA PORT 4052 LDA #$00;SKIP SPACE IM RAM LOESCHEN 4054 LDX #$07; DAMIT TABULATORFUNKTION AUCH IM 4056 H0 STA $0900,X;GRAPHIKMODUS FUNKTIONIERT 4058 DEX 4059 BPL H0 4060 LDA #$12;ZEILENABSTAND GRAPHIKKONFORM SETZEN 4070 STA $86 4080 STA $E9FE;GRAPHIKENDEANFORDERUNG RUECKSETZEN 4090 STA $E9FF;GRAPHIKMODUS ANZEIGEN 4100 RTS;ZURUECK ZU SA0 4150 H1 LDX $E9FF;GRAPHIK EINGESCHALTET 4160 CPX #$12 4170 BEQ H2;JA, DANN GRAPHIKBEHANDLUNG 4180 JMP OUT;SONST AUSGABE WIE GEWOHNT 4190 H2 CMP #$80;ISTS EIN STEUERZEICHEN 4195 AND #$7F;MSB LOESCHEN 4200 BCS H3;ALS GRAPHIKZEICHEN VERARBEITEN 4210 CMP #$0E;CHR$(14) 4220 BEQ H4;JA, DANN GRAPHIKENDE BEANTRAGEN 4230 CMP #$0F;CHR$(15) 4240 BNE H5;NEIN, DANN WEITER UNTERSUCHEN 4250 H4 STA $E9FE;GRAPHIKENDE ANFORDERN 4260 LDA #$24 4270 STA $86;ZEILENABSTAND KORRIGIEREN 4280 RTS;WEITER MIT SA0 4300 H6 LDA $82;ZEILE ABSCHLIESSEN 4310 BEQ H7;ZAHL DER SPALTEN DURCH 8 TEILBAR 4320 H8 LDA #$00;SONST AUF GANZES ZEICHEN ERGAENZEN 4330 JSR H3 4340 LDA $82 4350 BNE H8 4360 H7 STA $80;REGISTER RUECKSETZEN 4370 STA $81 4380 STA $83 4390 TYA 4400 JSR OUT;ZEILENENDE SIGNALISIEREN 4410 LDA $E9FE 4420 CMP #$12;GRAPHIKENDE ANGEFORDERT 4430 BEQ H9;NEIN, DANN ZURUECK ZU SA0 4435 H22 LDA $7A;SONST WARTEN, BIS MECHANIK FERTIG 4436 BNE H22 4440 LDA PORT;UND ZEICHENSATZ-ROM EINSCHALTEN 4450 ORA #$10 4460 STA PORT 4470 LDA #$24 4480 STA $E9FF 4490 H9 RTS;ZURUECK ZU SA0 4500 H5 JSR $EFA2;AUF TERMINATOR UNTERSUCHEN 4510 TAY 4520 H20 BCS H6;ZEILE AUSDRUCKEN FALLS TERMINATOR 4530 CMP #$1A;CHR$(26) = ZEICHEN MEHRFACH DRUCKEN 4540 BNE H10;NEIN, DANN WEITER UNTERSUCHEN 4550 JSR IN;ANZAHL HOLEN 4560 STA $85 4570 JSR IN;ZEICHEN HOLEN 4573 LDA $64 4574 BPL H12;ENDE, FALLS NICHT GUELTIGES ZEICHEN 4575 AND #$7F;MSB LOESCHEN 4580 STA $7F 4590 H11 LDA $7F 4600 JSR H3;ZEICHEN SO OFT AUSGEBEN WIE VERLANGT 4610 DEC $85 4620 BNE H11 4630 H12 RTS;ZURUECK ZU SA0 4640 H10 CMP #$0C;CHR$(12) = FORMFEED 4650 BNE H12;ZURUECK ZU SA0 FALLS NICHT 4660 TAY 4670 JMP H6;SONST ZEILE BEENDEN 4700 H3 LDX #$00;GRAPHIKZEICHENVERARBEITUNG 4705 STX $84 4710 LDX #$08 4715 H13 ROR A;ZEICHEN UMDREHEN 4720 ROL $84 4725 DEX 4730 BNE H13 4735 H23 LDA $81 4740 CMP #$E4;ERSTES ZEICHEN 4745 BCS H14 4750 ADC #$E4;JA DANN ADRESSOFFSET ADDIEREN 4755 STA $81 4760 H14 LDA $84 4762 LDX #$00 4765 STA ($80,X);ZEICHEN IN RAM 4770 INC $80 4775 BNE H15 4780 INC $81 4785 H15 DEC $82 4790 BPL H12;JEWEILS 8 ZEICHEN GEBEN EINS IM PUFFER 4800 LDA #$4F;80 ZEICHEN PRO ZEILE 4802 LDX $65 4805 CPX #$0E;SA 14 4807 BEQ H21 4810 LDA #$3B;SONST NUR 60 ZEICHEN 4812 H21 CMP $83 4815 BCS H16;ZEILENENDE NICHT ERREICHT 4817 LDY #$0D 4818 LDA #$00 4819 STA $82 4820 JSR H7;ZEILE ABSCHLIESSEN 4821 H24 LDA $7A 4822 BNE H24;AUSDRUCK ABWARTEN 4823 JMP H23;NEUE ZEILE BEGINNEN 4825 H16 LDX #$07;ZAEHLER 0..7 RUECKSETZEN 4830 STX $82 4835 LDA $83;UMRECHNUNG ZEICHENSATZPLATZ IN ASCII 4840 CMP #$20 4845 BCS H18 4850 ADC #$40 4855 BCC H19 4860 H18 CMP #$40 4865 BCC H19 4870 ADC #$1F 4875 H19 INC $83 4880 JMP OUT;ASCII CODE IN PUFFER 5000 *= $7F00;*** SA15 HEXDUMPMODE *** 5010 G1 JSR IN 5020 BVS G6 5030 J7 JSR $EFA2; ** _ ** EINSPRUNG HIER ! 5040 BCC G1;AUF TERMINATOR WARTEN 5050 G4 JSR IN;ZEICHEN HOLEN 5060 BVS G2;FALLS SA GEWECHSELT, DIESE AUSGEBEN 5070 G5 LDA $64;SONST ZEICHEN LADEN, 5080 STA $80;SICHERN, 5090 JSR G3;HEXCODE BERECHNEN UND AUSGEBEN 5100 JMP G4;NAECHSTES ZEICHEN 5110 G2 LDA #$0D;NEUE SA MIT 5120 JSR OUT;NEUER ZEILE 5130 LDA #$2A;UND STERNCHEN WUERDIGEN 5140 JSR OUT 5150 CLV 5160 LDA $65;SA LADEN, 5170 STA $80;SICHERN, 5180 JSR G3;HEXCODE BERECHNEN UND AUSGEBEN 5190 JMP G5;ZUGEHOERIGES ZEICHEN HINTERHER 5200 G6 JMP $EE80;TERMINATOR ERROR 5210 G3 LSR A;HIGHNIBBLE BERECHNEN 5220 LSR A 5230 LSR A 5240 LSR A 5250 JSR G7;UND AUSGEBEN 5260 LDA $80;LOWNIBBLE BERECHNEN 5270 AND #$0F 5280 JSR G7;UND AUSGEBEN 5290 LDA #$20;LEERZEICHEN 5300 JSR OUT;ZWEIMAL 5310 JSR OUT;ZWISCHEN ZWEI BYTES AUSGEBEN 5320 RTS 5330 G7 CLC;NIBBLE IN HEXADEZIMALDARSTELLUNG 5340 ADC #$30;VERKLEIDEN 5350 CMP #$3A 5360 BCC G8 5370 ADC #$06 5380 G8 JSR OUT;UND IN DRUCKERPUFFER DRUECKEN 5390 RTS 8000 *= $7FF1;RESETVEKTOR 8010 LDA #$FF;RESET EINSPRUNG 8020 STA PORT;ALLE PORTPINS AUF HIGH 8030 STA $0242;ALLE PORTPINS ALS AUSGAENGE 8040 JMP $EA31;ZUM ALTEN EINSPRUNG 8050 .WORD $FFF1;NEUER RESETVEKTOR